12 sample_keybdmod.hsp

sample\ 12 sample_keybdmod.hsp

#include "hsp3dish.as"

#include "mod_layerbutton-keybd.hsp"
#include "d3m.hsp"  ; FPS計測用

screen 0, 640,480
title "mod_layerbutton-keybd サンプル"

// HSP3Dish.js用データフォルダ設定
info_os = sysinfo(0)
if instr(info_os,0,"Emscripten")>=0 : mm_dir="" : else : mm_dir="data/"

// 画像読み込み
celload mm_dir+"keybd.png", -1
cel_keybd = stat : celdiv cel_keybd,32,32, 16,16
celload mm_dir+"backsp.png", -1
cel_backsp = stat : celdiv cel_backsp,32,32, 16,16
gsel 0

inputVar = "サンプルもじ"  ; inputの変数
// 初期画面作成
gosub *setup_input

// 表示ループ
repeat
	redraw 0 :color 255,255,255: boxf: color: pos 0,0: font msgothic,17
	mes "fps = " + d3getfps()
	redraw 1
	await 1000/60
loop
stop

// layerbutton Group ID
#const ID_INPUT_DUMMY 0
#const ID_BUTTON_KEYBOARD_CREATE 1
#const ID_BLACK_BACKGROUND 10
#const ID_KEYBOARD_BACK 11
#const ID_KEYBOARD 100

*create_keyboard
	// キーボード作成
	pos 10,230
	out_keybd = inputVar
	ScKeyboard ginfo_sx-20,200, out_keybd,16, ID_KEYBOARD, 30,10,5, 0,5,5, -1
	ScKeybd_color $FEFEFE,$B8D7F1,$0266D8,$D0D0D0
	Sckeybd_cursor  ; cursorキー有り設定
	ScKeybd_onEvent *on_keybd
	// キーボード入力補助画面(黒背景と入力中文字列などの表示)
	pos 0,0
	layerbutton ginfo_sx,ginfo_sy, 0,ID_BLACK_BACKGROUND, 50,,,30 {
		laybtn_settings 1,1,0  ; 表示のみ (設定 : キー/マウス操作無効)
		if lparam == objlayer_cmddraw {
			font msgothic,20,1 : color 255,255,255
			laybtn_ezbox $BB000000,,,,,,,,,0  ; 半透明黒で画面全体を覆う(角丸なし長方形)
			// 入力中文字の表示
			if layerbtn_stat < LAYBTN_SHOW_OUT {  ; LAYBTN_SHOW_OUT, LAYBTN_COMPLETE 時には描画しない(フェードできないため)
				pos 10,10 : color 255,255,255
				mes "文字列を入力してください"
				Sckeybd_cursor -2  ; カーソル位置取得
				if stat != cursor_pos : cursor_ipa = iparam  ; カーソルの点滅ループを初期化する
				cursor_pos = stat
				split_char@modlaybtn_keybd out_keybd, split_input  ; 一文字ずつ分ける (対応:shift-jis,utf8)
				num = stat
				pos 110,133
				repeat num + 1
					if cnt == cursor_pos {  ; カーソル描画
						if (iparam-cursor_ipa)/40\2 : color 35,88,126 : else : color 73,175,255
						boxf ginfo_cx-2,ginfo_cy-4, ginfo_cx, 155 : color 255,255,255
					}
					if cnt == num : break
					mes ""+split_input(cnt), 1 : pos ginfo_cx+3  ; 文字列描画
				loop
				boxf 100,155, 540,155+2  ; 下線描画
				font msgothic,14
				pos -ginfo_sx,-ginfo_sy : mes ""+num+"/16"  ; ginfo_mesx取得用
				pos 540-ginfo_mesx,162 : mes ""+num+"/16"
			}
		}
		return
	}
	// キーボード後ろ側の明るい背景(装飾)
	pos 0, 210
	layerbutton ginfo_sx,ginfo_sy-190, 0,ID_KEYBOARD_BACK, 50,,,30 {
		laybtn_settings 1,1,0  ; 表示のみ (設定 : キー/マウス操作無効)
		if lparam == objlayer_cmddraw {
			laybtn_ezbox $EEEFEFEF,,,,,,,,,10  ; アール(R)指定
		}
		return
	}
	return

// キーボード描画割り込み
*on_keybd
	// 一文字削除キーを画像に差し替え
	if refstr == "一字削" {
		laybtn_ezcel cel_backsp,0,,,,,,,,,1,1  ; celputだと、もしSHOW_OUTがあったときフェードが難しいので
		return -1
	}
	if refstr == "OK" {
		if (layerbtn_stat & LAYBTN_SHOW_OUT)!=0 && layerbtn_cnt == 0 {
			logmes "OK!"  ; OKを押した瞬間に何かしたかったらココ
		}
	}
	// キーボードが非表示になった(削除された)
	if layerbtn_stat == LAYBTN_GROUP_DELETED {
		// キーボード画面の黒背景等を削除
		laybtn_hide ID_BLACK_BACKGROUND
		laybtn_hide ID_KEYBOARD_BACK
		laybtn_hide ID_INPUT_DUMMY
		// キーボード表示ボタンを有効に戻す
		laybtn_enable ID_BUTTON_KEYBOARD_CREATE, 1
		// 削除していたinputオブジェクトを再作成
		pos 100,50 : objsize 300,50
		inputVar = out_keybd
		input inputVar : id_input = stat
	}
	return

// 初期画面作成
*setup_input	
	// inputオブジェクト作成
	pos 100,50 : objsize 300,50
	input inputVar : id_input = stat
	// キーボード表示ボタン作成
	pos 420,50
	layerbutton 90,50, 0, ID_BUTTON_KEYBOARD_CREATE, 0,10,10, 0,5,5 {
		laybtn_settings 1,0,1  ; 設定 : キー入力無効、押しても消えない
		if lparam == objlayer_cmddraw {
			laybtn_ezbox $0266D8, $3385E6, $014C9C  ; 青い背景描画
			pos objlayer_axis_x+objlayer_size_x/2,objlayer_axis_y+objlayer_size_y/2
			celput cel_keybd,0  ; キーボード画像描画
			if layerbtn_stat == LAYBTN_PRESS_IN_SELECTED {  ; ボタンが選択されたとき
				// キーボード表示ボタンを無効にする
				laybtn_enable ID_BUTTON_KEYBOARD_CREATE, 0
				// いったんinputオブジェクトは消す (キーボード削除時に再作成)
				clrobj id_input,id_input
				// inputオブジェクトのダミー描画オブジェクトを作る (キーボード入力中、inputをいったん消す代わり)
				pos 100, 50
				layerbutton 300,50, 0, ID_INPUT_DUMMY {
					laybtn_settings 1,1,0  ; 表示のみ (設定 : キー/マウス操作無効)
					if lparam == objlayer_cmddraw :	color 200,200,200 : boxf objlayer_axis_x,objlayer_axis_y, objlayer_axis_x2,objlayer_axis_y2
					return
				}
				// キーボードコントローラを作成
				gosub *create_keyboard
			}
		}
		return
	}
	return